home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / developer / script / extract_gobo.rexx < prev    next >
OS/2 REXX Batch file  |  1999-10-10  |  6KB  |  216 lines

  1. /* extract_gobo.rexx -- Extract gobo#?.zip and modify it to work with Sofa.
  2.  *
  3.  * in more detail, the following operations are performed
  4.  * - the ZIP archive is extracted, and CR/LF in text files are converted to LF
  5.  * - #?.exe and #?.ge files are removed
  6.  * - rename.se files are created for classes with too long filenames
  7.  * - empty lines and "--" lines are removed from loadpath.se
  8.  * - for every se.sh script, a se.amiga script is created
  9.  *
  10.  * $VER: extract_gobo.rexx 1.2 (10.10.99)
  11.  */
  12. AddLib('rexxsupport.library', 0, -30, 0)
  13.  
  14. gobo_zip     = 'sofa_archive:gobo15.zip'
  15. sofa_path    = 'sofa:'
  16. archive_path = 'sofa:archive/'
  17. library_path = 'sofa:library/'
  18. gobo_path    = 'sofa:library/gobo/'
  19. make_rename  = 'sofa:developer/make_rename_se/make_rename_se'
  20.  
  21. temp_file = 't:make_gobo_conversion.tmp'
  22. path_file = 't:make_gobo_conversion.loadpath'
  23.  
  24. /* Flags to specify which operations are to be executed */
  25. no_extract = 0
  26. no_remove = 0
  27. no_loadpath = 0
  28. no_script = 0
  29. no_rename = 0
  30.  
  31. /* Ensure that make_rename exists */
  32. if ~exists(make_rename) then do
  33.    Say 'cannot find tool "' || make_rename || '":'
  34.    Say 'the developer archive must be installed, and the tool must be compiled'
  35.    exit 10
  36. end
  37.  
  38. old_path = Pragma('Directory', gobo_path)
  39. Address Command
  40.  
  41. /* Extract archive with the following options
  42.  * -a  convert CR/LF in text files
  43.  * -q  quiet operation
  44.  * -o  overwrite without asking
  45.  */
  46. Say 'extract ' || gobo_zip
  47. if ~no_extract then do
  48.    'unzip -aqo ' || gobo_zip
  49. end
  50. else do
  51.    Say '   skipped'
  52. end
  53.  
  54. /* Remove useless files */
  55. Say 'remove useless files'
  56. if ~no_remove then do
  57.    Say '   remove #?.exe'
  58.    'rx sofa:developer/script/recursive_remove_pattern bin pattern=#?.exe'
  59.  
  60.    Say '   remove #?.ge'
  61.    'unzip -l ' || gobo_zip || ' *.ge >' || temp_file
  62.    if ~Open('list', temp_file, 'read') then do
  63.       Say 'cannot read archive list from "' || temp_file || '"'
  64.       exit 10
  65.    end
  66.  
  67.    do while ~eof('list')
  68.       line = ReadLn('list')
  69.       Parse Var line length date time name
  70.       if Right(name, 3) = '.ge' then do
  71.          name = Strip(name, 'L')
  72.          Say '   ' || name
  73.          call Delete(name)
  74.       end
  75.    end
  76.  
  77.    Say '   remove gepp scripts'
  78.    call Delete(gobo_path || 'bin/ge2e.sh')
  79.    call Delete(gobo_path || 'bin/make_spec.bat')
  80.  
  81.    call Close('list')
  82. end
  83. else do
  84.    Say '   skipped'
  85. end
  86.  
  87. /* Make rename.se */
  88. Say 'make rename.se'
  89. if ~no_rename then do
  90.    'sofa:developer/make_rename_se/make_rename_se amiga ' || gobo_zip
  91. end
  92. else do
  93.    Say '   skipped'
  94. end
  95.  
  96. /* Change directory into library */
  97. Pragma('Directory', gobo_path || 'library')
  98.  
  99. /* convert loadpath.se */
  100. Say 'convert loadpath.se'
  101. if ~no_loadpath then do
  102.    Say '   looking for loadpath.se'
  103.    'list ' || gobo_path || ' pat=loadpath.se lformat=%p%n all >' || temp_file
  104.    if ~Open('list', temp_file, 'read') then do
  105.       Say 'cannot read list of loadpath.se files from "' || temp_file || '"'
  106.       exit 10
  107.    end
  108.  
  109.    do while ~eof('list')
  110.       file = ReadLn('list')
  111.       if file ~= '' then do
  112.          Say '   ' || file
  113.          if Open('loadpath', file, 'read') then do
  114.             if Open('temppath', path_file, 'write') then do
  115.                do while ~eof('loadpath')
  116.                   line = ReadLn('loadpath')
  117.                   if Left(line, 2) = '--' then do
  118.                      Say '      stripped "' || line || '"'
  119.                      line = ''
  120.                   end
  121.                   if line ~= '' then do
  122.                      call WriteLn('temppath', line)
  123.                   end
  124.                end
  125.                call Close('temppath')
  126.             end
  127.             else do
  128.                Say 'cannot write temporary loadpath to "' || path_file || '"'
  129.                exit 10
  130.             end
  131.             call Close('loadpath')
  132.          end
  133.          else do
  134.             Say 'cannot read loadpath from "' || file || '"'
  135.             exit 10
  136.          end
  137.          'copy clone quiet "' || path_file || '" "' || file || '"'
  138.       end
  139.    end
  140.    call Close('list')
  141. end
  142. else do
  143.    Say '   skipped'
  144. end
  145.  
  146. /* Make se.amiga scripts and copy SCOPTIONS */
  147. Say 'make se.amiga'
  148. if ~no_script then do
  149.    Say '   looking for "se.sh" scripts'
  150.    'list ' || gobo_path || ' pat=se.sh lformat=%p%n all >' || temp_file
  151.    if ~Open('list', temp_file, 'read') then do
  152.       Say 'cannot read list of se.sh files from "' || temp_file || '"'
  153.       exit 10
  154.    end
  155.  
  156.    do while ~eof('list')
  157.       sh_script = ReadLn('list')
  158.       if sh_script ~= '' then do
  159.          amiga_script = Left(sh_script, Length(sh_script) - 2) || 'amiga'
  160.          Say '   ' || amiga_script
  161.          path = Left(sh_script, LastPos('/', sh_script))
  162.          'copy quiet clone sofa:settings/sofa.with ' || path || 'SCOPTIONS'
  163.          if Open('sh', sh_script, 'read') then do
  164.             if Open('amiga', amiga_script, 'write') then do
  165.                last_line = ''
  166.                do while ~eof('sh')
  167.                   line = ReadLn('sh')
  168.                   if Left(line, 2) = '#!' then do
  169.                      line = ''
  170.                   end
  171.  
  172.                   if Left(line, 1) = '#' then do
  173.                      line = Overlay(';', line)
  174.                   end
  175.                   else do
  176.                      Parse Var line 'export ' rest
  177.                      if rest ~= '' then do
  178.                         Parse Var rest variable '=' value
  179.                         line = 'set ' || variable || ' ' || value
  180.                      end
  181.                   end
  182.  
  183.                   if (line ~= '') | (last_line ~= '') then do
  184.                      call WriteLn('amiga', line)
  185.                   end
  186.                   last_line = line
  187.                end
  188.                call Close('amiga')
  189.                'protect ' || amiga_script || ' add s'
  190.             end
  191.             else do
  192.                Say 'cannot write script to "' || amiga_script || '"'
  193.                exit 10
  194.             end
  195.             call Close('sh')
  196.          end
  197.          else do
  198.             Say 'cannot read script from "' || sh_script || '"'
  199.             exit 10
  200.          end
  201.       end
  202.    end
  203.    call Close('list')
  204. end
  205. else do
  206.    Say '   skipped'
  207. end
  208.  
  209. /* Clean up */
  210. call Delete(path_file)
  211. call Delete(temp_file)
  212. Pragma('Directory', old_path)
  213.  
  214. exit 0
  215.  
  216.